// 这是一个Rust基础语法演示文件
// 我们将从最核心的概念开始，逐步讲解

// 1. 基本数据类型和变量
fn basic_types() {
    // 整数类型
    let a = 42; // i32类型（默认）
    let b: u64 = 100; // 无符号64位整数
    
    // 浮点数类型
    let c = 3.14; // f64类型（默认）
    let d: f32 = 2.718; // 32位浮点数
    
    // 布尔类型
    let e = true;
    let f: bool = false;
    
    // 字符类型（注意是单引号）
    let g = 'A';
    let h: char = '😊'; // 支持Unicode
    
    // 字符串类型（&str是字符串切片）
    let i = "Hello, Rust!";
    
    println!("基本数据类型示例:");
    println!("整数: {}, {}", a, b);
    println!("浮点数: {}, {}", c, d);
    println!("布尔值: {}, {}", e, f);
    println!("字符: {}, {}", g, h);
    println!("字符串: {}", i);
}

// 2. 变量可变性
fn mutability() {
    // 不可变变量（默认）
    let x = 5;
    // x = 10; // 这行会报错，因为x是不可变的
    
    // 可变变量
    let mut y = 5;
    y = 10; // 这行可以正常执行
    
    println!("\n变量可变性示例:");
    println!("不可变变量x: {}", x);
    println!("可变变量y修改后: {}", y);
}

// 3. 简单函数
fn simple_functions() {
    // 无参数无返回值函数
    fn greet() {
        println!("Hello from greet function!");
    }
    
    // 带参数函数
    fn add(a: i32, b: i32) -> i32 {
        a + b // Rust中最后一行表达式的结果会自动作为返回值
    }
    
    println!("\n函数示例:");
    greet();
    let sum = add(3, 5);
    println!("3 + 5 = {}", sum);
}

// 4. 控制流 - if语句
fn control_flow_if() {
    let number = 7;
    
    println!("\nif语句示例:");
    if number > 10 {
        println!("数字大于10");
    } else if number < 5 {
        println!("数字小于5");
    } else {
        println!("数字在5和10之间");
    }
}

// 5. 控制流 - 循环
fn control_flow_loops() {
    println!("\n循环示例:");

    // for循环（最常用）
    println!("for循环:");
    for i in 1..=5 {
        println!("迭代 {} 次", i);
    }

    // while循环
    println!("\nwhile循环:");
    let mut count = 0;
    while count < 3 {
        println!("计数: {}", count);
        count += 1;
    }
}
// 6. 用户输入示例
fn user_input_demo() {
    use std::io;
    
    println!("\n用户输入示例:");
    println!("请输入您的名字: ");
    
    let mut name = String::new();
    // 读取用户输入
    io::stdin()
        .read_line(&mut name)
        .expect("无法读取输入");
    
    // 去除输入中的换行符
    let name = name.trim();
    
    println!("您好, {}! 很高兴认识您。", name);
    
    // 再尝试一个数字输入
    println!("请输入您的年龄: ");
    let mut age = String::new();
    io::stdin()
        .read_line(&mut age)
        .expect("无法读取输入");
    
    // 将字符串转换为数字
    match age.trim().parse::<u32>() {
        Ok(num) => println!("您明年将满 {} 岁。", num + 1),
        Err(_) => println!("请输入有效的数字。"),
    }
}


// 主函数
pub fn main() {
    println!("=== Rust基础语法演示 ===");
    basic_types();
    mutability();
    simple_functions();
    control_flow_if();
    control_flow_loops();
    user_input_demo(); // 调用用户输入示例函数
    println!("\n=== 演示结束 ===");
}